package main

import (
	"fmt"
	"log"
	"net/http"
	"sync"
)

var sum int64 = 0

// 预存商品数量
var productNum int64 = 10000

// 互斥锁
var mutex sync.Mutex

// 计数
var count int64 = 0

func GetProduct(w http.ResponseWriter, req *http.Request) {
	if GetOneProduct() {
		w.Write([]byte("true"))
		return
	}
	w.Write([]byte("false"))
	return
}

// 获取秒杀商品
func GetOneProduct() bool {
	// 加锁
	mutex.Lock()
	defer mutex.Unlock()
	count += 1
	// 当有巨大访问来临时，每100个请求只处理一个，相当于把RabbitMQ的性能提高100倍（凭运气，有点狗）
	if count % 100 == 0 {
		// 判断数据是否超限
		if sum < productNum {
			sum += 1
			fmt.Println(sum)
			return true
		}
	}
	return false
}

func main() {
	http.HandleFunc("/getOne",GetProduct)
	err := http.ListenAndServe(":8091",nil)
	if err != nil{
		log.Fatal("Err:",err)
	}
}